/*
 * @Author: Jiagang Chen
 * @Date: 2021-11-24 05:30:39
 * @LastEditors: Jiagang Chen
 * @LastEditTime: 2021-12-13 03:52:45
 * @Description: ...
 * @Reference: ...
 */
#ifndef _VILENS_COMMON_HEADER_H_
#define _VILENS_COMMON_HEADER_H_

// STD
#include <cpuid.h>
#include <math.h>
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/times.h>
#include <sys/vtimes.h>
#include <algorithm>
#include <atomic>
#include <chrono>
#include <cmath>
#include <condition_variable>
#include <cstdio>
#include <cstdlib>
#include <ctime>
#include <fstream>
#include <iomanip>
#include <ios>
#include <iostream>
#include <memory>
#include <mutex>
#include <queue>
#include <sstream>
#include <string>
#include <thread>
#include <unordered_map>
#include <unordered_set>
#include <vector>

using namespace std;

// BOOST
#include <boost/algorithm/string.hpp>
#include <boost/circular_buffer.hpp>

// GLOG
#include <glog/logging.h>

// YAML-CPP
#include <yaml-cpp/yaml.h>

// EIGEN
#include <Eigen/Core>
#include <Eigen/Dense>

using namespace Eigen;

// CERES
#include <ceres/ceres.h>
#include <ceres/rotation.h>

// sophus
#include <sophus/se3.hpp>

// PCL
#include <lci_slam/CustomMsg.h>
#include <pcl/filters/approximate_voxel_grid.h>
#include <pcl/filters/crop_box.h>
#include <pcl/filters/voxel_grid.h>
#include <pcl/io/pcd_io.h>
#include <pcl/point_cloud.h>
#include <pcl/point_types.h>
#include <pcl/visualization/pcl_visualizer.h>
#include <pcl/visualization/point_cloud_color_handlers.h>
#include <pcl_conversions/pcl_conversions.h>

#include <pcl/surface/concave_hull.h>
#include <pcl/surface/convex_hull.h>

namespace vilens {
typedef pcl::PointXYZINormal PointType;
typedef pcl::PointCloud<PointType> PointCloudXYZI;
}  // namespace vilens

// ROS
#include <ros/ros.h>
#include <rosbag/bag.h>

#include <std_msgs/Bool.h>
#include <std_msgs/Float32.h>
#include <std_msgs/Header.h>

#include <sensor_msgs/Image.h>
#include <sensor_msgs/Imu.h>
#include <sensor_msgs/PointCloud.h>
#include <sensor_msgs/PointCloud2.h>
#include <sensor_msgs/image_encodings.h>

#include <cv_bridge/cv_bridge.h>

#include <nav_msgs/Odometry.h>
#include <nav_msgs/Path.h>

#include <visualization_msgs/Marker.h>

#include <tf/transform_broadcaster.h>
#include <tf/transform_datatypes.h>
#include <tf2_ros/transform_broadcaster.h>

#include <geometry_msgs/PointStamped.h>
#include <geometry_msgs/Vector3.h>

#include <message_filters/subscriber.h>
#include <message_filters/sync_policies/approximate_time.h>
#include <message_filters/time_synchronizer.h>

#include <pcl_ros/point_cloud.h>
#include <pcl_ros/transforms.h>
#include <pcl_ros/impl/transforms.hpp>

#include <geometry_msgs/PoseStamped.h>

#endif